package com.zhengqing.design.action.observer._01;


import com.zhengqing.design.action.observer._01.listener.EventListener;
import org.assertj.core.util.Lists;

import java.util.List;

/**
 * <p> 可被观察的对象接口，提供注册、注销、通知所有的观察者的行为 </p>
 *
 * @author zhengqingya
 * @description
 * @date 2022/12/20 17:36
 */
public class EventManager {

    private List<EventListener> listenerList = Lists.newArrayList();

    /**
     * 订阅
     *
     * @param listener 监听
     */
    public void subscribe(EventListener listener) {
        this.listenerList.add(listener);
    }

    /**
     * 取消订阅
     *
     * @param listener 监听
     */
    public void unsubscribe(EventListener listener) {
        this.listenerList.remove(listener);
    }

    /**
     * 通知
     *
     * @param obj 内容
     */
    public void notify(Object obj) {
        for (EventListener listener : this.listenerList) {
            listener.doEvent(obj);
        }
    }

}
